package com.wing.system.model.entity;

import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.enums.IEnum;
import com.wing.mybatis.common.BaseEntity;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;

/**
 * 入驻企业
 *
 * @author
 */
@Data
@NoArgsConstructor
@Accessors(chain = true)
@TableName("sys_system_enterprise")
public class SystemEnterprise extends BaseEntity<SystemEnterprise> implements Serializable {

    private static final long serialVersionUID = 1L;

    public enum SubjectType implements IEnum<Integer> {

        /**
         * 制造业企业
         */
        manufacturing(0,"制造业企业"),
        /**
         * 第三服务商
         */
        serviceProvider(1,"第三服务商"),
        /**
         * 应用开发者
         */
        developers(2,"应用开发者");

        private int code;
        private String desc;

        SubjectType(int code,String desc){
            this.code=code;
            this.desc=desc;
        }

        @Override
        public Integer getValue(){
            return this.code;
        }

        public String getDesc(){
            return this.desc;
        }
    }

    public enum SubjectNature implements IEnum<Integer> {

        /**
         * 央企/国企
         */
        centralEnterprise(0,"央企/国企"),
        /**
         * 股份公司
         */
        shares(1,"股份公司"),
        /**
         * 有限责任公司
         */
        limitedLiability(2,"有限责任公司"),
        /**
         * 个体户
         */
        individual(3,"个体户");

        private int code;
        private String desc;

        SubjectNature(int code,String desc){
            this.code=code;
            this.desc=desc;
        }

        @Override
        public Integer getValue(){
            return this.code;
        }

        public String getDesc(){
            return this.desc;
        }
    }

    public enum TypeOfEnterprise implements IEnum<Integer> {

        /**
         * 入驻企业
         */
        settled(0,"入驻企业"),
        /**
         * 自营企业
         */
        selfEmployed(1,"自营企业");

        private int code;
        private String desc;

        TypeOfEnterprise(int code,String desc){
            this.code=code;
            this.desc=desc;
        }

        @Override
        public Integer getValue(){
            return this.code;
        }

        public String getDesc(){
            return this.desc;
        }
    }

    public enum IndustryId implements IEnum<Integer> {

        /**
         * 生产行业
         */
        productionIndustry(0,"生产行业"),
        /**
         * 制造行业
         */
        manufacturingIndustry(1,"制造行业"),
        /**
         * 互联网行业
         */
        iTIndustry(2,"互联网行业");

        private int code;
        private String desc;

        IndustryId(int code,String desc){
            this.code=code;
            this.desc=desc;
        }

        @Override
        public Integer getValue(){
            return this.code;
        }

        public String getDesc(){
            return this.desc;
        }
    }

    public enum OccupancyType implements IEnum<Integer> {

        /**
         * 企业
         */
        company(0,"企业"),
        /**
         * 厂家
         */
        enterpricce(1,"厂家");

        private int code;
        private String desc;

        OccupancyType(int code,String desc){
            this.code=code;
            this.desc=desc;
        }

        @Override
        public Integer getValue(){
            return this.code;
        }

        public String getDesc(){
            return this.desc;
        }
    }

    public enum Status implements IEnum<Integer> {

        /**
         * 待审核
         */
        pendingReview(0,"待审核"),
        /**
         * 已审核
         */
        audited(1,"已审核"),
        /**
         * 审核未通过
         */
        auditFailed(2,"审核未通过");

        private int code;
        private String desc;

        Status(int code,String desc){
            this.code=code;
            this.desc=desc;
        }

        @Override
        public Integer getValue(){
            return this.code;
        }

        public String getDesc(){
            return this.desc;
        }
    }


    /**
     * 创建者
     */
    private Long creator;

    /**
     * 有效期
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime validityPeriod;

    /**
     * 修改者
     */
    private Long modifier;

    /**
     * 创建人
     */
    private String creatorName;

    /**
     * 修改人
     */
    private String modifierName;

    /**
     * 主体类型
     */
    private SubjectType subjectType;

    /**
     * 主体类型描述
     */
    @TableField(exist = false)
    private String subjectTypeDesc;

    public String getSubjectTypeDesc() {
        return subjectType == null ? null : subjectType.getDesc();
    }

    /**
     * 主体性质
     */
    private SubjectNature subjectNature;

    /**
     * 主体性质描述
     */
    @TableField(exist = false)
    private String subjectNatureDesc;

    public String getSubjectNatureDesc() {
        return subjectNature == null ? null : subjectNature.getDesc();
    }

    /**
     * 主体类型
     */
    private TypeOfEnterprise typeOfEnterprise;

    /**
     * 主体类型描述
     */
    @TableField(exist = false)
    private String typeOfEnterpriseDesc;

    public String getTypeOfEnterpriseDesc() {
        return typeOfEnterprise == null ? null : typeOfEnterprise.getDesc();
    }

    /**
     * 所属行业
     */
    private IndustryId industryId;

    /**
     * 所属行业描述
     */
    @TableField(exist = false)
    private String industryIdDesc;

    public String getIndustryIdDesc() {
        return industryId == null ? null : industryId.getDesc();
    }

    /**
     * 名称
     */
    private String name;

    /**
     * 统一信用代码
     */
    private String creditCode;

    /**
     * 证件附件
     */
    private String credentials;

    /**
     * 企业照片
     */
    private String photo;

    /**
     * 微信OpenID
     */
    private String wchartOpenId;

    /**
     * 省
     */
    private Long province;

    /**
     * 市
     */
    private Long city;

    /**
     * 区
     */
    private Long area;

    /**
     * 详情地址
     */
    private String address;

    /**
     * 坐标信息
     */
    private String coordinateInformation;

    /**
     * 产品类型
     */
    private Long productType;

    /**
     * 可加工材料
     */
    private Long proProductMaterialCategoryId;

    /**
     * 设备厂家
     */
    private Long eduId;

    /**
     * 面向客户行业
     */
    private Long clientIndustryId;

    /**
     * 银行账号
     */
    private String bankAccount;

    /**
     * 开户行
     */
    private String bank;

    /**
     * 开户许可证
     */
    private String license;

    /**
     * 营业执照编号
     */
    private String businessLicenseCode;

    /**
     * 入驻上传证明
     */
    private String entryCertificate;

    /**
     * 入驻填写示例
     */
    private String entryProof;

    /**
     * 法人姓名
     */
    private String legalPersonName;

    /**
     * 法人身份证
     */
    private String idCard;

    /**
     * 身份证正面证据照
     */
    private String idCardFront;

    /**
     * 身份证反面证据照
     */
    private String idCardReverse;

    /**
     * 公司简介
     */
    private String companyProfile;

    /**
     * 排序
     */
    private Integer sortNumber;

    /**
     * 状态
     */
    private Status status;

    /**
     * 状态描述
     */
    @TableField(exist = false)
    private String statusDesc;

    public String getStatusDesc() {
        return status == null ? null : status.getDesc();
    }

    /**
     * 管理员编码(UID)
     */
    private Integer administratorCode;

    /**
     * 管理员名称
     */
    private String administratorName;

    /**
     * 管理员id
     */
    private Long administratorId;

    /**
     * 用户名
     */
    private String username;

    /**
     * 入驻类型
     */
    private OccupancyType occupancyType;

    /**
     * 入驻类型描述
     */
    @TableField(exist = false)
    private String occupancyTypeDesc;

    public String getOccupancyTypeDesc() {
        return occupancyType == null ? null : occupancyType.getDesc();
    }

    /**
     * 企业登陆账号
     */
    private String companyNumbe;

    /**
     * 企业登录密码
     */
    private String companyPassword;

    /**
     * 密保邮箱
     */
    private String encryptedEmail;

    /**
     * 重复密码
     */
    private String companyResPassword;

    /**
     * 公司代码
     */
    private String companyCode;

    private String linkman;

    private String contact;

    private String enterpriseAddress;


}
